home *** CD-ROM | disk | FTP | other *** search
- #include "defs.h"
-
- ixrect *pr;
- har *progname;
- har filename[BUFSIZ];
-
- #ifdef STANDALONE
- ain(argc, argv, envp)
- #else
- fill_main(argc, argv, envp)
- #endif
- int argc;
- char **argv;
- char **envp;
- {
- int i;
- FILE *fp;
- int xpos, ypos;
- int boundary;
- colormap_t colormap;
-
- xpos = ypos = boundary = 0;
- progname = strsave(argv[0]);
- parse_profile(&argc, argv, envp);
-
- while ((gc = getopt(argc, argv, "x:y:b:")) != EOF)
- switch (gc) {
- case 'x':
- xpos = atoi(optarg);
- break;
- case 'y':
- ypos = atoi(optarg);
- break;
- case 'b':
- boundary = atoi(optarg);
- break;
- case '?':
- errflag++;
- break;
- }
-
- if (errflag)
- error((char *) 0, "Usage: %s: [-b boundary] [-x xpos] [-y ypos] [infile] [outfile]\n", progname);
-
- for (stream = 0; optind < argc; stream++, optind++)
- if (stream < 2 && strcmp(argv[optind], "-") != 0)
- if (freopen(argv[optind], mode[stream], f[stream]) == NULL)
- error("%s %s", PR_IO_ERR_INFILE, argv[optind]);
-
- if ((pr = pr_load(stdin, &colormap)) == NULL)
- error(PR_IO_ERR_RASREAD);
-
- ffill(xpos, ypos, boundary);
-
- pr_dump(pr, stdout, &colormap, RT_STANDARD, 0);
- }
-
- fill(x, y, n)
- nt x,y,n;
- {
- register int i, j, k;
-
- if (x < 0 || x >= pr->pr_size.x || y < 0 || y >= pr->pr_size.y || pr_get(pr, x, y) == n)
- return;
-
- pr_put(pr, x, y, n);
-
- for (i = x - 1; i >= 0; i--) /* to the left */
- if (pr_get(pr, i, y) != n)
- pr_put(pr, i, y, n);
- else
- break;
-
- for (j = x + 1; j < pr->pr_size.x; j++) /* to the right */
- if (pr_get(pr, j, y) != n)
- pr_put(pr, j, y, n);
- else
- break;
-
- for (k = i + 1; k < j; k++) {
- if (y > 0 && pr_get(pr, k, y - 1) != n)
- ffill(k, y - 1, n);
- if (y < pr->pr_size.y - 1 && pr_get(pr, k, y + 1) != n)
- ffill(k, y + 1, n);
- }
- }
-
-
-
-